Delbin: fix infinite read in depacketizer. linux hid: parsing fixes. Doc improvements.
authorrobertl <robertl>
Tue, 30 Jun 2009 02:58:06 +0000 (02:58 +0000)
committerrobertl <robertl>
Tue, 30 Jun 2009 02:58:06 +0000 (02:58 +0000)
delbin.c
xmldoc/formats/delbin.xml

index eebdac42ebad1985bbfc79a87405e294e0453b53..e46a68bd52afcc470b88ecf9cfbd00273a7a622d 100644 (file)
--- a/delbin.c
+++ b/delbin.c
@@ -530,6 +530,7 @@ read_depacketize_1(gbuint8** p, unsigned n, int new_packet)
        static unsigned buf_i, buf_n;
        while (buf_n == 0 || new_packet) {
                packet_read(buf);
+               new_packet = FALSE;
                if (buf[1] <= delbin_os_packet_size - 2) {
                        buf_n = buf[1];
                        buf_i = 2;
@@ -1984,8 +1985,10 @@ delbin_rw_init(const char *fname)
                        warning(MYNAME ": device %s %s\n", p->product, p->firmware);
                if (opt_long_notes) {
                        use_extended_notes = TRUE;
+               } else if (strstr(p->product, "PN-20")) {
+                       use_extended_notes = p->firmware[0] > '1' ||
+                               (p->firmware[0] == '1' && p->firmware[2] >= '6');
                } else if (strstr(p->product, "PN-40")) {
-                       // Don't know if pre-2.5 PN-40 firmware or PN-20 can handle 0xb016 message
                        use_extended_notes = p->firmware[0] > '2' ||
                                (p->firmware[0] == '2' && p->firmware[2] >= '5');
                }
@@ -2034,11 +2037,7 @@ delbin_write(void)
 static waypoint*
 delbin_rd_position(posn_status* status)
 {
-       waypoint* wp = read_position();
-       if (wp == NULL) {
-               status->request_terminate = 1;
-       }
-       return wp;
+       return read_position();
 }
 
 ff_vecs_t delbin_vecs = {
@@ -2468,20 +2467,21 @@ linuxhid_os_init(const char* fname)
 
        fd_hidraw = fd_hiddev = -1;
        if (fname && memcmp(fname, "hid:", 4) == 0) {
-               const char* raw_name = fname + 4;
-               const char* dev_name = strchr(raw_name, ',');
+               char* raw_name = xstrdup(fname + 4);
+               char* dev_name = strchr(raw_name, ',');
                if (dev_name == NULL) {
-                       fatal(MYNAME ": missing hiddev\n");
+                       fatal(MYNAME ": missing hiddev path\n");
                }
+               *dev_name++ = 0;
                fd_hidraw = open(raw_name, O_RDONLY);
                if (fd_hidraw < 0) {
                        fatal(MYNAME ": %s: %s\n", raw_name, strerror(errno));
                }
-               dev_name++;
                fd_hiddev = open(dev_name, O_WRONLY);
                if (fd_hiddev < 0) {
                        fatal(MYNAME ": %s: %s\n", dev_name, strerror(errno));
                }
+               xfree(raw_name);
        } else {
                dir = opendir("/dev");
        }
index 94ac354037283250212779b26b7ffe3721b3ad83..3b7280f1cd5ab3003c4bda775e8f9ddd9140b955 100644 (file)
@@ -1,5 +1,5 @@
 <para>
-  The 'delbin' module supports Delorme PN-20, PN-30, and PN-40 receivers.
+  The 'delbin' module supports DeLorme PN-20, PN-30, and PN-40 receivers.
   <important>
     <para>
       Not all strains of Linux are supported.   Fedora 7 is known not to work, for example.
@@ -9,7 +9,12 @@
 <para>
   Only the 'usb:' device is supported.  If you're on Windows, do not attempt to
   run this through the serial driver.
+</para>
 <para>
+  On Linux, a name of the form 'hid:path-to-hidraw,path-to-hiddev' is also supported.
+  You will need to use this only if the HID device nodes on your system are not named
+  /dev/hidrawN and /dev/hiddevN or /dev/usb/hiddevN.
+</para>
 
 <para>
   This module implements the (undocumented) waypoint extensions introduced
     </userinput>
   </para>
 </example>
-
-
-<para>GPSBabel supports the following <ulink url="http://www.magellangps.com">Magellan</ulink> receivers:
-<simplelist columns="2">
-       <member>310</member>
-       <member>315</member>
-       <member>Map330</member>
-       <member>SporTrak Map Color</member>
-       <member>SporTrak Map</member>
-       <member>SporTrak Map Pro</member>
-       <member>SporTrak Map Topo</member>
-       <member>Meridian (green or yellow)</member>
-       <member>Meridian Gold</member>
-       <member>Meridian Platinum</member>
-       <member>Meridian Color</member>
-       <member>Explorist 100 (with aftermarket cable)</member>
-       <member>Explorist 200 (with aftermarket cable)</member>
-       <member>Explorist 300 (with aftermarket cable)</member>
-       <member>Explorist 210</member>
-       <member>Explorist 300</member>
-       <member>Explorist 400</member>
-       <member>Explorist 500</member>
-       <member>Explorist 600</member>
-       <member>Explorist XL</member>
-</simplelist>
-</para>
-     
-<para>
-       This format is used for both the serial protocol used on the
-       devices with serial ports such as Map330 and Meridian and for
-       the files stored either in either the unit's internal memory 
-       (Explorist 210, Explorist 400, Explorist 500, Explorist 600, 
-       Explorist XL) or on removable memory.
-</para> 
-<para>
-       If you specify a serial port for the file (.e.g. "COM1", "/dev/ttyS0")
-       to be read or written, GPSBabel will use serial protocol.   Specifying
-       a file, either on local filesystem or on a mounted flash card reader,
-       will results in the file-based format being used.
-</para>